package process;

/**
 * @Author:cjj
 * 通信方式
 *  多进程通信方式
 *   通常涉及在不同的进程之间传递数据或同步操作。
 *   1.管道(Pipe)
 *      管道是Unix合Linux系统中最简单的IPC形式之一,它可以在两个相关的进程之间传递数据。管道通常是单向的,即只能用于
 *      单向数据流,但可以通过创建两个管道实现双向通信。
 *  2.命名管道(Named Pipe)
 *    类似于管道,但可以通过文件系统进行命名和访问,允许无亲缘关系的进程之间进行通信。
 *  3.消息队列(Message Queue)
 *    消息队列是一种通过消息传递进行通信的机制,允许进程通过向队列发送和接受消息来进行通信。
 *  4.共享内存(Shared Memory)
 *    共享内存是进程间通信的高效方式,它允许多个进程访问同一个逻辑内存区域,实现快速的数据共享。(速度快,但要同步)
 *  5.信号量(Semaphore)
 *     信号量是一种计数器,用于多进程间的同步,可以用来解决多个进程竞争有限资源的问题。
 *  6.套接字(Socket)
 *     套接字不仅用于网络编程,也可以在同一台机器上的不同进程间进行通信,提供了灵活和强大的通信能力。
 *
 *  多线程通信方式
 *   多线程通信通常发生在同一进程内的不同线程之间
 *   1.共享内存
 *    在多线程中,共享内存仍然是一种有效的通信方式,因为所有线程都可以直接访问共享的内存数据结构。
 *  2.互斥锁：
 *    互斥锁是最基本的线程同步机制,它可以保护临界区,确保同时只有一个线程可以访问共享资源。
 *  3.条件变量:
 *     条件变量允许一个线程在满足特定条件前进入休眠状态,直到其他线程通知条件变量满足了条件。
 *  4.信号量：
 *     信号量不仅可以用于多进程,也可以在多线程中使用,用于控制对有限资源的访问。
 *  5.屏障
 *    屏障允许一组线程在达到某个点前全部等待,然后同时继续执行,用于同步多个线程的执行步骤。
 *  6.线程安全队列：
 *     特殊涉及的数据结构,例如线程安全的队列,可以用来在线程间安全地传递数据
 *
 */
public class IPC {

    /**
     * 总结：
     *  多进程和多线程各有优劣,选择合适的并发模型取决于应用的需求,性能要求和安全考虑。在实际开发中,通常会根据
     *  具体的场景来决定是采用多进程还是多线程,有时甚至两者结合使用,以充分利用系统资源和提升应用程序的效率。
     *
     * 1.定义和概念
     *   多进程指的是同时运行多个独立的进程,每个进程有自己的地址空间,是系统分配资源和调度的基本单位。每个进程都有自己
     *   的内存空间,数据独立,通信通过进程间通信(IPC)来实现。
     *   多线程是在同一个进程中同时运行多个线程,每个线程共享进程的地址空间和资源,是CPU调度的基本单位。线程之间共享相同的
     *   上下文,可以方便地共享数据和通信。
     * 2.内存和资源管理
     *    每个进程有独立的内存空间,相互之间不受影响,但创建和销毁进程的开销比较大,因为需要分配和释放独立的内存空间。进程间的通信
     *    比较复杂,需要使用IPC机制来实现。比如 管道 消息队列 共享内存等。
     *    线程共享进程的内存空间,因此数据共享和通信比较容易和高效,但需要确保线程安全,避免数据竞争和死锁等问题。创建和销毁线程
     *    的开销相对较小,因为不需要像进程那样分配和释放独立的内存空间。
     * 3.切换和调度
     *      进程切换的开销比较大，因为涉及到不同进程间的上下文切换,需要保存和恢复更多的状态信息。进程之间的调度由操作系统负责
     *      进程之间的切换是通过操作系统的调度算法来实现的
     *
     *      线程切换的开销相对较小,因为线程共享同一进程的地址空间,上下文切换主要涉及寄存器值的保存和恢复。线程的调度可以由操作系统
     *      调度器完成,也可以通过线程库中的用户级调度器来实现。
     * 4.并发性和效率
     *    由于每个进程都有独立的内存空间,可以更好的利用多核处理器,适合CPU密集型任务。但进程的通信成本较高,因此在需要频繁通信核协作的
     *    场景下效率可能较低。
     *    线程之间共享数据和内存空间,适合IO密集型任务和需要频繁通信的场景。但需要注意线程安全问题,合理设计和使用锁和同步机制,
     *    避免数据竞争和死锁。
     * 5.编程模型和适用场景
     *    多进程适合需要在不同进程间分配任务或者需要独立处理的任务,如服务器架构中的分布式处理。可以更好的利用多核处理器,提高整体系统
     *    的并行性能。
     *    多进程适合需要实时性和相互协作的任务,例如CUI应用程序,Web服务器处理请求,多媒体应用等。可以简化数据共享和通信,提升
     *    程序的响应速度和用户体验。
     *
     *
     */


}
